#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
#include <string.h>

typedef struct {
    char *msg;
    int len;
} Result;

// 红玫瑰线程函数
void *red_func(void *arg) {
    char code = *(char *)arg;

    printf("红玫瑰线程开始执行，收到数据code=%c\n", code);

    // 不断读取用户输入
    while (1) {
        char input[10];
        fgets(input, 10, stdin);
        // 如果得到的是code值，要退出，并返回一个Result结构体
        if (input[0] == code)
        {
            Result *result = malloc(sizeof(Result));
            result->msg = "红玫瑰离开去了北京";
            result->len = strlen(result->msg);
            printf("红玫瑰线程得到输入：%c 退出了\n", code);
            // return result;
            pthread_exit(result);  // 使用pthread_exit来退出线程
        }
        else // 如果不是，输出得到输入内容
        {
            printf("红玫瑰线程收到输入：%s \n", input);
        }
    }
        
}



// 白玫瑰线程函数
void *white_func(void *arg) {
    char code = *(char *)arg;

    printf("白玫瑰线程开始执行，收到数据code=%c \n", code);

    // 不断读取用户输入
    while (1) {
        char input[10];
        // fgets(input, 10, stdin);
        read(STDIN_FILENO, input, 10);
        // 如果得到的是code值，要退出，并返回一个Result结构体
        if (input[0] == code)
        {
            Result *result = malloc(sizeof(Result));
            result->msg = "白玫瑰离开去了大上海";
            result->len = strlen(result->msg);
            printf("白玫瑰线程得到输入：%c 退出了\n", code);
            return result;
        }
        else // 如果不是，输出得到输入内容
        {
            printf("白玫瑰线程收到输入：%s\n", input);
        }
    }
}


int main(int argc, char *argv[]) {
    
    // 创建红玫瑰和白玫瑰线程
    pthread_t red_thread;
    pthread_t white_thread;
    char red_code = 'r';
    char white_code = 'w';
    pthread_create(&red_thread, NULL, red_func, &red_code);
    pthread_create(&white_thread, NULL, white_func, &white_code);

    // 等待红玫瑰和白玫瑰线程执行结束
    Result *red_result;
    Result *white_result;
    pthread_join(red_thread, (void **)&red_result);
    pthread_join(white_thread, (void **)&white_result);

    printf("main线程得到红玫瑰的结局：%s, 长度为：%d\n", red_result->msg, red_result->len);
    printf("main线程得到白玫瑰的结局：%s, 长度为：%d\n", white_result->msg, white_result->len);
}